package commonclass.stringclass;


import org.junit.jupiter.api.Test;

/**
 * @author Lenl
 * @version v1.0
 * @create 2021-06-03 20:39
 * @description 关于String、StringBuffer、StringBuilder的使用
 *
 * 三者异同？
 *  同：底层都是用char[]存储、
 *  异：
 *  String：不可变的字符序列
 *  StringBuffer：可变的字符序列、线程安全的(效率较低)
 *  StringBuilder：可变的字符序列、线程不安全的(效率较高)
 *
 * String str=new String();//char[] value=new char[0];
 *
 * StringBuffer sb1=new StringBuffer()//char[] value=new char[16]---底层默认创建长度为16的字符
 * sb1.append('a');//value[0]='o';
 * StringBuffer sb2=new StringBuffer("abc");//char[] value =new char["abc".length+16]
 *
 * 注意：
 * 1.system.out.println(sb2.length())//0
 * 2.append长度超过16时，底层扩容
 *      默认情况下扩容为原来的2倍+2，同时将原有数组中元素复制到新的数组中
 *      指导意义：开发中建议使用StringBuffer(int capacity)指定长度或StringBuilder(int capacity)
 *
 */
public class StringBufferAndBuilder {


    @Test
    public  void test1(){
        StringBuffer sb1=new StringBuffer("abc");
        sb1.setCharAt(0,'m');
        sb1.append("23132132198765242");
        System.out.println(sb1);
        StringBuffer sb2=new StringBuffer();
        System.out.println(sb2.length());
    }

    /**
     * StringBuffer常用方法(Builder一样)
     * append(xxx):字符串拼接
     * delete(int start,int end):删除指定位置内容
     * replace(int start,int end,String str):把[start,end)位置替换为str
     * insert(int offset,xxx):在指定位置插入xxx
     * reverse():逆序
     * int indexOf(String str)
     * String substring(int start,int end)
     * int Length()
     * char CharAt(int n)
     * void setCharAt(int n,char ch)
     *
     *总结：增、删、改、查、插、长度、遍历（for、charAt、toString）
     */
    @Test
    public void test2(){
        StringBuffer s1=new StringBuffer("abc");
        s1.append(1);
        System.out.println('1');
        System.out.println(s1);
        s1.delete(0,2);
        System.out.println(s1);//[)左闭右开
        s1.append("a123321z");
        s1.replace(2,4,"pp"); //[)左闭右开
        System.out.println(s1);
        s1.insert(1,"123");
        System.out.println(s1);
        s1.reverse();
        System.out.println(s1);
        String str=s1.substring(0,6);
        System.out.println(str+"("+s1+")");
        System.out.println(s1.toString());
    }

}
